package com.jctrip.hotel.source.service.atour;

import java.math.BigDecimal;
import java.util.List;
import java.util.function.Function;

import com.jctrip.hotel.source.model.OrderDataResult;
import com.jctrip.hotel.source.model.PriceCheckParam;
import com.jctrip.hotel.source.model.Result;
import com.jctrip.hotel.source.model.atour.req.CancelOrderReq;
import com.jctrip.hotel.source.model.atour.req.CreateOrderReq;
import com.jctrip.hotel.source.model.atour.req.QueryOrderReq;
import com.jctrip.hotel.source.model.atour.req.QueryOrderResp;
import com.jctrip.hotel.source.model.atour.resp.*;
import com.jctrip.hotel.source.model.wehotel.req.OrderData;

/**
 * @Author henry
 * @Date 2023/6/3 15:15
 * @Description
 */
public interface AtourService {

    Integer parseAppId(String appId);

    /**
     * jc hotelId to atour hotelId
     */
    Integer parseHotelId(String innId);

    /**
     * atour hotelid to jc hotel id
     */
    String parseInnId(Integer hotelId);

    Integer parseRoomTypeId(String roomTypeCode);

    /**
     * 获取城市信息
     */
    List<CityData> getCityList(Integer appId, String key);

    /**
     * 获取指定城市内，酒店基础信息
     */
    List<HotelData> getHotelList(Integer appId, String key, Integer cityId);

    /**
     * 获取酒店详细信息
     */
    HotelData getHotel(Integer appId, String key, Integer hotelId);


    /**
     * 获取酒店房型信息
     */
    List<RoomTypeData> getRoomTypeList(Integer appId, String key, Integer hotelId);

    /**
     * 房价
     */
    List<RoomRateData> getRoomRateList(Integer appId, String key, Integer hotelId, Integer roomTypeId, String start,
            String end, Integer roomRateTypeId, Integer mebId);

    /**
     * 库存
     */
    List<RoomInventoryData> getRoomInventoryList(Integer appId, String key, Integer hotelId, Integer roomTypeId,
            String start, String end, Integer roomRateTypeId, Integer mebId);


    /**
     * 查询
     * 实时房态，亚朵下单的时候需要使用
     */
    List<CreateOrderReq.RoomRate> roomRateList(Integer appId, String key, Integer hotelId, Integer roomTypeId,
            String start, String end, Integer roomRateTypeId, Integer mebId);

    /**
     * 下单 下单时，需要调用 getRoomRateList 查询最新房价数据，构造参数 roomRateList
     */
    OrderDataResult postOrder(Integer appId, String key, CreateOrderReq createOrderReq, PriceCheckParam priceCheck, String sourceExtra);

    /**
     * 下单，直连下单时使用。
     */
    CreateOrderResp creatOrder(Integer appId, String key, CreateOrderReq createOrderReq);

    /**
     * @param orderNo 亚朵订单编号
     * @param outOrderNo  jc订单编号
     */
    OrderData queryOrderData(Integer appId, String key, String orderNo, String outOrderNo);

    /**
     * 查询订单
     */
    QueryOrderResp queryOrder(Integer appId, String key, QueryOrderReq queryOrderReq);
    QueryOrderResp queryDirectOrder(String sourceId, QueryOrderReq queryOrderReq);

    /**
     * 取消订单
     */
    CancelOrderResp cancelOrder(Integer appId, String key, CancelOrderReq cancelOrderReq);

}
